From: Florian Müllner Date: Thu, 15 Apr 2021 10:00:12 +0000 (+0200) Subject: overviewControls: Support double-super when animations are off X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~616^2^2~53 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=28723ac088835cccd23447c8d718bdca8e6aebf0;p=gnome-shell.git overviewControls: Support double-super when animations are off When super is pressed again during the overview transition, we shift up to the app grid. That means that the feature currently doesn't work when animations are disabled (like in a VM), because there is no transition in that case. Address this by adding a time-based fallback in that case, i.e. shift up when a second super-press occurs within 250ms after the first one. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4121 Part-of: --- diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js index 3b5ec583f..811d7c202 100644 --- a/js/ui/overviewControls.js +++ b/js/ui/overviewControls.js @@ -1,7 +1,7 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- /* exported ControlsManager */ -const { Clutter, Gio, GObject, Meta, Shell, St } = imports.gi; +const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi; const AppDisplay = imports.ui.appDisplay; const Dash = imports.ui.dash; @@ -407,6 +407,7 @@ class ControlsManager extends St.Widget { this._a11ySettings = new Gio.Settings({ schema_id: A11Y_SCHEMA }); + this._lastOverlayKeyTime = 0; global.display.connect('overlay-key', () => { if (this._a11ySettings.get_boolean('stickykeys-enable')) return; @@ -414,7 +415,15 @@ class ControlsManager extends St.Widget { const { initialState, finalState, transitioning } = this._stateAdjustment.getStateTransitionParams(); - if (transitioning && finalState > initialState) + const time = GLib.get_monotonic_time() / 1000; + const timeDiff = time - this._lastOverlayKeyTime; + this._lastOverlayKeyTime = time; + + const shouldShift = St.Settings.get().enable_animations + ? transitioning && finalState > initialState + : Main.overview.visible && timeDiff < Overview.ANIMATION_TIME; + + if (shouldShift) this._shiftState(Meta.MotionDirection.UP); else Main.overview.toggle();